<TagAttribute("device","devi","obje","????",1,656)>
Public Class DEVICE_TAG
Inherits HaloTag
Public Const Extension as String = "device"
Public Const FourCC as String = "devi"
Public Const ParentFourCC as String = "obje"
Public Const GrandParentFourCC as String = "????"
Public Const [Version] as Short = 1
Public Const HeaderLength as Integer = 656

''' <summary>
''' 
''' </summary>
<TagField("", 2, -1)>
Public padding as Byte()

''' <summary>
''' 
''' </summary>
<TagField("flags", 1, 19)>
Public flags as Short

''' <summary>
''' 
''' </summary>
<TagField("bounding radius:world units", 1, 0)>
Public bounding_radius as Single

''' <summary>
''' 
''' </summary>
<TagField("bounding offset", 3, 2)>
Public bounding_offset as Single()

''' <summary>
''' 
''' </summary>
<TagField("origin offset", 3, 2)>
Public origin_offset as Single()

''' <summary>
''' marine 1.0, grunt 1.4, elite 0.9, hunter 0.5, etc.
''' </summary>
<TagField("acceleration scale:[0,+inf]", 1, 0)>
Public acceleration_scale as Single

''' <summary>
''' 
''' </summary>
<TagField("", 4, -1)>
Public padding_1 as Byte()

''' <summary>
''' 
''' </summary>
<TagField("model", 16, 10)>
Public model as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("animation graph", 16, 10)>
Public animation_graph as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("", 40, -1)>
Public padding_2 as Byte()

''' <summary>
''' 
''' </summary>
<TagField("collision model", 16, 10)>
Public collision_model as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("physics", 16, 10)>
Public physics as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("modifier shader", 16, 10)>
Public modifier_shader as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("creation effect", 16, 10)>
Public creation_effect as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("", 84, -1)>
Public padding_3 as Byte()

''' <summary>
''' if set, this radius is used to determine if the object is visible. set it for the pelican.
''' </summary>
<TagField("render bounding radius:world units", 1, 0)>
Public render_bounding_radius as Single

''' <summary>
''' 
''' </summary>
#Region "export to functions"

''' <summary>
''' 
''' </summary>
<TagField("A in", 1, 17)>
Public A_in as Short

''' <summary>
''' 
''' </summary>
<TagField("B in", 1, 17)>
Public B_in as Short

''' <summary>
''' 
''' </summary>
<TagField("C in", 1, 17)>
Public C_in as Short

''' <summary>
''' 
''' </summary>
<TagField("D in", 1, 17)>
Public D_in as Short

''' <summary>
''' 
''' </summary>
<TagField("", 44, -1)>
Public padding_4 as Byte()

''' <summary>
''' 
''' </summary>
<TagField("hud text message index", 1, 23)>
Public hud_text_message_index as Short

''' <summary>
''' 
''' </summary>
<TagField("forced shader permuation index", 1, 23)>
Public forced_shader_permuation_index as Short

''' <summary>
''' object_attachment_block
''' </summary>
<TagField("attachments", 72, 11)>
Public attachments as List(Of ATTACHMENTS_BLOCK)

''' <summary>
''' object_widget_block
''' </summary>
<TagField("widgets", 32, 11)>
Public widgets as List(Of WIDGETS_BLOCK)

''' <summary>
''' object_function_block
''' </summary>
<TagField("functions", 360, 11)>
Public functions as List(Of FUNCTIONS_BLOCK)

''' <summary>
''' object_change_colors
''' </summary>
<TagField("change colors", 44, 11)>
Public change_colors as List(Of CHANGE_COLORS_BLOCK)

''' <summary>
''' predicted_resource_block
''' </summary>
<TagField("predicted resources", 8, 11)>
Public predicted_resources as List(Of PREDICTED_RESOURCES_BLOCK)

''' <summary>
''' 
''' </summary>
#End Region
#Region "$$$ DEVICE $$$"

''' <summary>
''' 
''' </summary>
<TagField("flags", 1, 20)>
Public flags_1 as Integer

''' <summary>
''' 
''' </summary>
<TagField("power transition time:seconds", 1, 0)>
Public power_transition_time as Single

''' <summary>
''' 
''' </summary>
<TagField("power acceleration time:seconds", 1, 0)>
Public power_acceleration_time as Single

''' <summary>
''' 
''' </summary>
<TagField("position transition time:seconds", 1, 0)>
Public position_transition_time as Single

''' <summary>
''' 
''' </summary>
<TagField("position acceleration time:seconds", 1, 0)>
Public position_acceleration_time as Single

''' <summary>
''' 
''' </summary>
<TagField("depowered position transition time:seconds", 1, 0)>
Public depowered_position_transition_time as Single

''' <summary>
''' 
''' </summary>
<TagField("depowered position acceleration time:seconds", 1, 0)>
Public depowered_position_acceleration_time as Single

''' <summary>
''' 
''' </summary>
<TagField("A in", 1, 17)>
Public A_in_1 as Short

''' <summary>
''' 
''' </summary>
<TagField("B in", 1, 17)>
Public B_in_1 as Short

''' <summary>
''' 
''' </summary>
<TagField("C in", 1, 17)>
Public C_in_1 as Short

''' <summary>
''' 
''' </summary>
<TagField("D in", 1, 17)>
Public D_in_1 as Short

''' <summary>
''' 
''' </summary>
<TagField("open (up)", 16, 10)>
Public open as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("close (down)", 16, 10)>
Public close as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("opened", 16, 10)>
Public opened as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("closed", 16, 10)>
Public closed as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("depowered", 16, 10)>
Public depowered as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("repowered", 16, 10)>
Public repowered as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("delay time:seconds", 1, 0)>
Public delay_time as Single

''' <summary>
''' 
''' </summary>
<TagField("", 8, -1)>
Public padding_5 as Byte()

''' <summary>
''' 
''' </summary>
<TagField("delay effect", 16, 10)>
Public delay_effect as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("automatic activation radius:world units", 1, 0)>
Public automatic_activation_radius as Single

''' <summary>
''' 
''' </summary>
<TagField("", 84, -1)>
Public padding_6 as Byte()

''' <summary>
''' 
''' </summary>
<TagField("", 28, -1)>
Public padding_7 as Byte()
#End Region
Public Class ATTACHMENTS_BLOCK

''' <summary>
''' 
''' </summary>
<TagField("type^", 16, 10)>
Public type as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("marker", 32, 8)>
Public marker as String

''' <summary>
''' 
''' </summary>
<TagField("primary scale", 1, 17)>
Public primary_scale as Short

''' <summary>
''' 
''' </summary>
<TagField("secondary scale", 1, 17)>
Public secondary_scale as Short

''' <summary>
''' 
''' </summary>
<TagField("change color", 1, 17)>
Public change_color as Short

''' <summary>
''' 
''' </summary>
<TagField("", 2, -1)>
Public padding as Byte()

''' <summary>
''' 
''' </summary>
<TagField("", 16, -1)>
Public padding_1 as Byte()

End Class
Public Class WIDGETS_BLOCK

''' <summary>
''' 
''' </summary>
<TagField("reference^", 16, 10)>
Public reference as New TAG_REFERENCE

''' <summary>
''' 
''' </summary>
<TagField("", 16, -1)>
Public padding as Byte()

End Class
Public Class FUNCTIONS_BLOCK

''' <summary>
''' 
''' </summary>
<TagField("flags", 1, 20)>
Public flags as Integer

''' <summary>
''' this is the period for the above function (lower values make the function oscillate quickly, higher values make it oscillate slowly)
''' </summary>
<TagField("period:seconds", 1, 0)>
Public period as Single

''' <summary>
''' multiply this function by the above period
''' </summary>
<TagField("scale period by", 1, 17)>
Public scale_period_by as Short

''' <summary>
''' 
''' </summary>
<TagField("function", 1, 17)>
Public _function as Short

''' <summary>
''' multiply this function by the result of the above function
''' </summary>
<TagField("scale function by", 1, 17)>
Public scale_function_by as Short

''' <summary>
''' the curve used for the wobble
''' </summary>
<TagField("wobble function", 1, 17)>
Public wobble_function as Short

''' <summary>
''' the length of time it takes for the magnitude of this function to complete a wobble
''' </summary>
<TagField("wobble period:seconds", 1, 0)>
Public wobble_period as Single

''' <summary>
''' the amount of random wobble in the magnitude
''' </summary>
<TagField("wobble magnitude:percent", 1, 0)>
Public wobble_magnitude as Single

''' <summary>
''' if non-zero, all values above the square wave threshold are snapped to 1.0, and all values below it are snapped to 0.0 to create a square wave.
''' </summary>
<TagField("square wave threshold", 1, 0)>
Public square_wave_threshold as Single

''' <summary>
''' the number of discrete values to snap to (e.g., a step count of 5 would snap the function to 0.00,0.25,0.50,0.75 or 1.00)
''' </summary>
<TagField("step count", 1, 23)>
Public step_count as Short

''' <summary>
''' 
''' </summary>
<TagField("map to", 1, 17)>
Public map_to as Short

''' <summary>
''' the number of times this function should repeat (e.g., a sawtooth count of 5 would give the function a value of 1.0 at each of 0.25,0.50,0.75 as well as at 1.0
''' </summary>
<TagField("sawtooth count", 1, 23)>
Public sawtooth_count as Short

''' <summary>
''' add this function to the final result of all of the above math
''' </summary>
<TagField("add", 1, 17)>
Public _add as Short

''' <summary>
''' multiply this function (from a weapon, vehicle, etc.) final result of all of the above math
''' </summary>
<TagField("scale result by", 1, 17)>
Public scale_result_by as Short

''' <summary>
''' controls how the bounds, below, are used
''' </summary>
<TagField("bounds mode", 1, 17)>
Public bounds_mode as Short

''' <summary>
''' 
''' </summary>
<TagField("bounds", 2, 1)>
Public bounds as Single()

''' <summary>
''' 
''' </summary>
<TagField("", 4, -1)>
Public padding as Byte()

''' <summary>
''' 
''' </summary>
<TagField("", 2, -1)>
Public padding_1 as Byte()

''' <summary>
''' if the specified function is off, so is this function
''' </summary>
<TagField("turn off with", 1, 23)>
Public turn_off_with as Short

''' <summary>
''' applied before clip, ignored if zero
''' </summary>
<TagField("scale by", 1, 0)>
Public scale_by as Single

''' <summary>
''' 
''' </summary>
<TagField("", 252, -1)>
Public padding_2 as Byte()

''' <summary>
''' 
''' </summary>
<TagField("", 16, -1)>
Public padding_3 as Byte()

''' <summary>
''' 
''' </summary>
<TagField("usage", 32, 8)>
Public usage as String

End Class
Public Class CHANGE_COLORS_BLOCK

''' <summary>
''' 
''' </summary>
<TagField("darken by", 1, 17)>
Public darken_by as Short

''' <summary>
''' 
''' </summary>
<TagField("scale by", 1, 17)>
Public scale_by as Short

''' <summary>
''' 
''' </summary>
<TagField("scale flags", 1, 20)>
Public scale_flags as Integer

''' <summary>
''' 
''' </summary>
<TagField("color lower bound", 3, 2)>
Public color_lower_bound as Single()

''' <summary>
''' 
''' </summary>
<TagField("color upper bound", 3, 2)>
Public color_upper_bound as Single()

''' <summary>
''' object_change_color_permutations
''' </summary>
<TagField("permutations", 28, 11)>
Public permutations as List(Of PERMUTATIONS_BLOCK)
Public Class PERMUTATIONS_BLOCK

''' <summary>
''' 
''' </summary>
<TagField("weight", 1, 0)>
Public weight as Single

''' <summary>
''' 
''' </summary>
<TagField("color lower bound", 3, 2)>
Public color_lower_bound as Single()

''' <summary>
''' 
''' </summary>
<TagField("color upper bound", 3, 2)>
Public color_upper_bound as Single()

End Class

End Class
Public Class PREDICTED_RESOURCES_BLOCK

''' <summary>
''' 
''' </summary>
<TagField("type", 1, 17)>
Public type as Short

''' <summary>
''' 
''' </summary>
<TagField("resource index", 1, 23)>
Public resource_index as Short

''' <summary>
''' 
''' </summary>
<TagField("tag index", 1, 4)>
Public tag_index as Integer

End Class

End Class
